package controller;

import dao.UsuarioJpaController;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import dao.exceptions.NonexistentEntityException;
import model.Grupo;
import model.Usuario;
import pagecontroller.JsfUtil;
import pagecontroller.PageManager;

/**
 *
 * @author Edilson Fernandes da Costa
 * @version 1.0
 */
public class UsuarioController {

    public UsuarioController() {
        if (JsfUtil.getObjectFromSession("UsuarioJpaController") == null) {
            jpaController = new UsuarioJpaController();
        } else {
            jpaController = (UsuarioJpaController) JsfUtil.getObjectFromSession("UsuarioJpaController");
        }
    }
    private Usuario usuario = null;
    private Usuario usuarioAux = null;
    private UsuarioJpaController jpaController = null;
    private List<Usuario> usuarios = null;
    private Usuario usuarioLogado = null;

    public void persiste() {
        if (usuario.getId() == null) {
            create();
        } else {
            update();
        }
    }

    public String update() {
        try {
            jpaController.edit(this.usuario);
            usuarioAux = usuario;
            this.usuario = null;
            JsfUtil.addSuccessMessage("Usuario Atualizado com Sucesso");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(UsuarioController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(UsuarioController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "refreshPage";
    }

    public String create() {
        try {
            jpaController.create(usuario);
            usuarioAux = usuario;
            usuario = null;
            JsfUtil.addSuccessMessage("Usuario cadastrado com sucesso.");
        } catch (Exception e) {
            JsfUtil.ensureAddErrorMessage(e, "Ocorreu um erro na percistencia dos dados.");
            return null;
        }
        return "refreshPage";
    }

    public String edit() {
        Usuario usuarioTemp = (Usuario) JsfUtil.getObjectFromRequestParameter("usuario");
        this.usuario = usuarioTemp;
        return "refreshPage";
    }

    public String destroy() {
        Usuario usuarioTemp = (Usuario) JsfUtil.getObjectFromRequestParameter("usuario");
        try {
            jpaController.destroy(usuarioTemp.getId());
            JsfUtil.addSuccessMessage("Usuario removido com sucesso.");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(UsuarioController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "refreshPage";
    }

    public Usuario getUsuario() {
        if (usuario == null) {
            usuario = new Usuario();
        }
        return usuario;
    }

    public List<Usuario> getUsuarios() {
        this.usuarios = jpaController.findUsuarioEntities();
        return this.usuarios;
    }

    public UsuarioJpaController getJpaController() {
        return jpaController;
    }

    public Usuario getUsuarioAux() {
        return usuarioAux;
    }

    public Usuario getUsuarioLogado() {
        return usuarioLogado;
    }

    public String logar() {
        Usuario newUsuario = null;
        try {

            newUsuario = getUsuarioForName(usuario.getUsuario());

            if (usuario.getPass().equals(newUsuario.getPass())) {
                usuarioLogado = newUsuario;
                JsfUtil.addSuccessMessage("Logado com sucesso. Bem vindo "+ usuarioLogado.getProfessor().getNome() +".");

//                    if (usuarioLogado.getSenha().equals("mudar")) {
//                        pageManager.setPageMeusDados();
//                        JsfUtil.addErrorMessage("Você deve alterar sua senha");
//                    } else {
//                        pageManager.setPagePrincipal();
//                    }
                getPageManager().setPagePrincipal();

            } else {
                getPageManager().setPagePrincipal();

                JsfUtil.addErrorMessage("Senha Inválida");
            }

        } catch (Exception ex) {
            getPageManager().setPagePrincipal();
            JsfUtil.addErrorMessage("Usuário Inválido");
        }

        return "refreshPage";
    }

    private Usuario getUsuarioForName(String usuario) throws Exception {
        return jpaController.findUsuario(usuario);
    }

    private PageManager getPageManager() {
        PageManager pageManager = (PageManager) JsfUtil.getObjectFromSession("PageManager");
        return pageManager;
    }

    public boolean isLogado() {
        if (usuarioLogado == null) {
            return false;
        }
        return true;
    }

    public String deslogar() {
        usuarioLogado = null;
        getPageManager().setPagePrincipal();
//        PageManager pageManager = (PageManager) JsfUtil.getObjectFromSession("PageManager");
//        pageManager.setPagePrincipal();
        return "refreshPage";
    }
    
    
    public boolean isProfessor(){
        if(getUsuarioLogado() != null && getUsuarioLogado().getGrupo() == Grupo.PRFESSOR){
            return true;
        }
        return false;
    }
    
    public boolean isAdmin(){
        if(getUsuarioLogado() != null && getUsuarioLogado().getGrupo() == Grupo.ADMIN){
            return true;
        }
        return false;
    }
}
